package com.aaron.spring;

import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ClassPathBeanDefinitionScanner;
import org.springframework.core.type.filter.AnnotationTypeFilter;

import java.lang.annotation.Annotation;

// 自定义类扫描,这是一个扫描器，通过扫描器获取我们需要注册的bean
public class CustomScanner extends ClassPathBeanDefinitionScanner {
    // 自己的构造方法
    public CustomScanner(BeanDefinitionRegistry registry, Class<? extends Annotation> annoType) {
        // 父类的构造方法,默认调用是this(registry, true);
        super(registry);
        // 调用父类的方法addIncludeFilter()方法，注册过滤器，需要扫描的,指定扫描包中的类
        super.addIncludeFilter(new AnnotationTypeFilter(annoType));
    }

    // 返回扫描到添加了某个注解的类的个数，扫描包的路径（basePackages就是路径），
    // String...表示可变参数，就是scan()方法可以接收0到任意个的String类型的参数
    @Override
    public int scan(String... basePackages) {
        return super.scan(basePackages);
    }
}